www.gusucode.com > 精通MATLAB最优化计算全书代码 程序源码 > 随书源码_精通MATLAB最优化计算/第7章 无约束多维极值问题/minRb.m
function [x,minf] = minRb(f,x0,D,delta,alpha,beta,var,eps) format long; if nargin == 7 eps = 1.0e-6; end k = 0; x0 = transpose(x0); y0 = Funval(f, var,x0); delta0 = delta; n = length(var); [Q,R] = qr(D); y = x0; while 1 yf = Funval(f, var,y); bconti = 1; while bconti for i=1:n tmpy = delta(i)*Q(:,i); tmpf = Funval(f, var,y+tmpy); bconti = 0; if tmpf <= yf y = y + tmpy; delta(i) = alpha*delta(i); bconti = 1; else delta(i) = -beta*delta(i); end end end yfn = Funval(f, var,y); if yfn < yf continue; else if yfn == yf if yfn < Funval(f, var,x0) x1 = y; tol = norm(x1-x0); if tol<eps x = x1; break; else D=Q; D(:,1) = x1-x0; [Q,R] = qr(D); end delta = delta0; x0 = x1; y = x0; else if max(abs(delta)) < eps x = x0; break; else continue; end end end end end minf = Funval(f,var,x); format short;